package top.lshaci.learning.hutool;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
import org.junit.Test;

import java.io.File;

/**
 * ImgTest
 *
 * @author liangxu
 */
public class ImgTest {
    /**
     * 文件目录
     */
    private final String dir = "C:\\Users\\xyzl\\Pictures\\OXR_HQ";
    /**
     * AES密钥
     */
    private final String aesKey = "OuXiaoRui_HeQing";

    @Test
    public void encrypt() {
        File imgDir = new File(dir + "\\img");
        if (!imgDir.exists()) {
            return;
        }
        File[] imgFiles = imgDir.listFiles();
        if (ArrayUtil.isEmpty(imgFiles)) {
            return;
        }
        AES aes = SecureUtil.aes(StrUtil.bytes(aesKey));
        for (File imgFile : imgFiles) {
            // 1.读取图片、加密、反转、再次加密
            String content = aes.encryptHex(ArrayUtil.reverse(aes.encrypt(FileUtil.readBytes(imgFile))));
            // 2.将数据写入文件
            FileUtil.writeUtf8String(content, dir + "\\txt\\" + FileNameUtil.getName(imgFile));
        }
    }

    @Test
    public void decrypt() {
        File txtDir = new File(dir + "\\txt");
        if (!txtDir.exists()) {
            return;
        }
        File[] txtFiles = txtDir.listFiles();
        if (ArrayUtil.isEmpty(txtFiles)) {
            return;
        }
        AES aes = SecureUtil.aes(StrUtil.bytes(aesKey));
        for (File txtFile : txtFiles) {
            // 1.读取文本、解密、反转、再次解密
            byte[] imgBytes = aes.decrypt(ArrayUtil.reverse(aes.decrypt(FileUtil.readUtf8String(txtFile))));
            // 2.将数据写入图片
            FileUtil.writeBytes(imgBytes, dir + "\\img\\" + FileNameUtil.getName(txtFile));
        }
    }

}
